1. Field of the Invention
The present invention is related to an uncorrelated code hopping of a code matrix used to transmit data in a communications system.
2. Related Art
The existing data over cable standard is DOCSIS 2.0 includes a Synchronous Code Division Multiple Access (S-CDMA) modulation as one of several modulation options. Code hopping refers to a method whereby a modified code matrix is used for transmission at each spreading interval. The modified code matrix is produced via circular shifting of the codes in the original code matrix based on a pseudo-randomly generated shift number. In this shifting process, each code or row in the matrix is left unchanged, but the ordering of the codes or rows is altered. The DOCSIS S-CDMA scheme includes 128 spreading codes, where each spreading code (or waveform) is a row in the 128 bit×128 bit code matrix specified in the DOCSIS standard. A single row of the code matrix is a sequence of 128 bits of either 1 or −1. Each bit in the code is sometimes referred to as a chip. No two rows of the code matrix are the same. For example, if a first row in the code matrix is all 1s, the next row in the code matrix is a pseudo-random set of 1's and −1's. The rows are orthogonal, such that a dot product of a row with any other row equals zero. A dot product refers to an operation on two vectors wherein an element by element multiplication occurs, followed by a summing. This also means the rows are delta correlated with each other and they are zero correlated with any other row.
The rows of the code matrix are used for transmission of a symbol, e.g., a quadrature amplitude modulated (QAM) symbol, such as up through 256 QAM. Using the DOCSIS S-CDMA scheme, 128 QAM symbols can be transmitted at the same time. Each symbol is a complex value, because it has both in-phase and quadrature components, such that X and Y are its real and imaginary parts, respectively. To transmit the QAM symbol using S-CDMA, the symbol is multiplied by one of the rows of the code matrix. The product is then transmitted serially over a channel, where it may be summed with modulated QAM symbols utilizing the other rows of the code matrix. The rows of the code matrix remain orthogonal even after they are multiplied by different (or the same) complex constants, such as the QAM symbol complex values. There are 128 rows in the code matrix, and since the rows remain orthogonal even with multiplication by the QAM symbols, all 128 rows (each multiplied by its associated QAM symbol) can be transmitted simultaneously, thus conveying 128 QAM symbols at the same time. The transmission of 128 QAM symbols at the same time can also be parsed such that more than one user is transmitting, each user employing a different subset of the 128 spreading codes. This is sometimes referred to as multiple access. This is in contrast to pure time division multiple access (TDMA), wherein only one QAM symbol is sent at a time.
In DOCSIS the symbols are sent at a maximum chip rate of 5.12 mega chips per second, which provides 5.12 million QAM symbols per second when all 128 spreading codes are utilized. Up to 64 users using as few as two codes per user can transmit at the same time, as one example of multiple access. If 128 symbols are sent at the same time all the symbols might be from one user (e.g., cable modem), or the symbols might be from 64 cable modems, each utilizing a different two of the 128 spreading codes, as two extreme cases.
One problem associated with transmission of the symbols derives from the unequal response of the codes to narrowband interference. The frequency response (or spectrum) of each code is not flat when the discrete Fourier transform (DFT) of the sequence is calculated. The spectrum has peaks and valleys, and may appear random. There may be narrowband interference in the channel, an impairment common in cable networks. If narrowband interference occurs at a valley in the spectrum of a particular spreading code, then a reduction of the impact created by the interference can occur, which is desirable. But if the interference occurs at a peak in the frequency response of that particular code, this is undesirable because it will amplify the interference. Another code has another random sequence of peaks and valleys, which results in a different response to that particular narrow band interference. Thus, there is inequality in transmission. Some of the codes have a good response, e.g., they are not very responsive to that narrow band interference, while other codes become degraded by the narrow band interference. This is in contrast to a goal of these systems, which is for all the users to receive equal performance. Also, due to the nonlinear relationship between bit error rate (BER) and signal-to-noise ratio (SNR), the system's average BER will be dominated by the codes having the poorest performance.
In order to improve performance, code shuffling or hopping has been introduced into DOCSIS, instead of assigning the spreading codes (i.e., rows) in the same pattern in repeated transmissions. Consider the full code matrix, with rows enumerated 0-127, with row 0 at the bottom of the matrix and row 127 at the top of the matrix. (This is the row numbering method used in DOCSIS.) We will refer to “code i” as the ith row of the original spreading matrix, starting with code 0 at the bottom. As the matrix is permuted, the codes will in general move to different rows in the modified spreading matrix. For the permutation (hopping) of the code matrix, a pseudo-random number is generated and applied so that the ordering of the rows in the matrix is modified. For example, the pseudo-random number 0 would result in the original matrix with rows 0-127 unchanged. In another example, a pseudo-random number 10 would circularly shift every row or code up by 10. In the example when the rows of the code matrix are circularly shifted by 10, then the code matrix shifts codes 0, 1, 2, 3, . . . , 117 to the top, with code 117 occupying the topmost row, and codes 118, 119, . . . , 127 at the bottom, with code 118 occupying the bottommost row. (A more detailed illustration is given later.) Through these permutations, an averaging effect occurs allowing each user which only has allocation of a subset of the spreading codes to get substantially equal performance over time. Thus, if a row of the code matrix experiences interference during one transmission, e.g., a QAM symbol gets degraded, desirably the next transmission gets better performance, such that it just averages out over time and any errors can be corrected by the forward error correction (FEC) decoder. A user which repeatedly has a subset of codes allocated for its transmissions does not get “stuck” with a poor performing code or codes.
In DOCSIS, a maximum of 40,000 symbols are transmitted per second on each one of the codes. Since there are up to 128 codes being sent at the same time, the maximum DOCSIS symbol rate is 5.12 million QAM symbols per second. This time interval for transmitting a spreading code, 40,000th of a second, is called the spreading interval. With code hopping, the code matrix numbering (i.e., assignment) starts over using a different configuration of the code matrix (which can be thought of as a modified code matrix), i.e., the code hopping is performed on each spreading interval. Thus, after each use of the code matrix, the rows of the code matrix are permutated through another circular shifting of the rows within the code matrix.
Thus, code hopping refers to a systematic re-ordering of the rows of the original spreading matrix C, such that at each spreading interval k, a new code matrix Ck is produced. A pseudo-random number generator determines a cyclic shift of a subset of the rows of the original matrix C. In code hopping, using selectable active codes mode 1 (DOCSIS 2.0 mode), when the number of active codes Na<128, the cyclic codes are hopped (cyclically shifted), while code 0, the all 1 s code, which is considered a less desirable code due to its poor spreading characteristics, remains fixed at the bottom of the code matrix. The unused codes are located in the (128−Na) bottom rows of the hopped matrix Ck. Thus, for Na<127, the set of unused codes changes at each spreading interval. When Na=128, all codes are hopped, including code 0.
The hopped spreading matrix is defined by:
      C    k    =      [                                        C                                          f                ⁡                                  (                                      k                    ,                    127                                    )                                            ,              127                                                            C                                          f                ⁡                                  (                                      k                    ,                    127                                    )                                            ,              126                                                …                                      C                                          f                ⁡                                  (                                      k                    ,                    127                                    )                                            ,              0                                                                        C                                          f                ⁡                                  (                                      k                    ,                    126                                    )                                            ,              127                                                            C                                          f                ⁡                                  (                                      k                    ,                    126                                    )                                            ,              126                                                …                                      C                                          f                ⁡                                  (                                      k                    ,                    126                                    )                                            ,              0                                                            …                          …                          …                          …                                                  C                                          f                ⁡                                  (                                      k                    ,                    0                                    )                                            ,              127                                                            C                                          f                ⁡                                  (                                      k                    ,                    0                                    )                                            ,              126                                                …                                      C                                          f                ⁡                                  (                                      k                    ,                    0                                    )                                            ,              0                                            ]  
where,
      f    ⁡          (              k        ,        i            )        =      {                                                                                                                                                          modulo                        ⁡                                                  (                                                      128                            -                                                          lfsr_out                              ⁢                                                              (                                k                                )                                                                                      +                            i                                                    )                                                                    ,                      128                                        )                                    ⁢                                      N                    a                                                  =                128                            ,                              0                ≤                i                ≤                127                                      ⁢                                                                                                                                                                      modulo                    ⁡                                          (                                              126                        -                                                  lfsr_out                          ⁢                                                      (                            k                            )                                                                          +                        i                                            )                                                        ,                  127                                )                            +              1                        ,                                          N                a                            <              128                        ,                          1              ≤              i              ≤              127                                          
The code matrix elements ci,j are the elements of the original code matrix C, k indicates the spreading interval, i indicates the row in the code matrix, lfsr_out is a pseudo-random number, and Na is the number of active codes.
In one example, instead of using all 128 codes, only a subset will be needed. For example 128 total−16 unused=108 active rows or 128 total−8 unused=120 active rows. In the latter example, 120 codes are active or used and 8 of codes are inactive or unused.
Although the rows in the code matrix are orthogonal to each other, a code in one row in the code matrix is nearly equal to a code in the next row, except just shifted by one. One exception is that the bits in the last row of the code matrix are not shifted. Thus, 127 out of 128 of the rows are simply a shift of the previous row or the code in the next row in the other direction. Because each row is so closely related to its neighboring row in its structure, the spectra of neighboring rows in the code matrix are very nearly the same, even though in the time domain the spreading codes are orthogonal. Thus, the maximums and minimums (e.g., peaks and valleys) in the spectra are almost identical between one row and the next row. Therefore, the neighboring rows will experience similar impacts from interference during transmissions, and since neighboring rows are assigned to users in DOCSIS 2.0 which are only allocated a contiguous subset of the rows, this means that such users could be allocated a subset of rows such that all are more impaired by a given narrowband interference than many other of the rows in the code matrix. Furthermore, this inequality between rows may persist over multiple transmissions for this user if the user is allocated the same or a similar subset of rows repeatedly.
The above code hopping scheme typically also uses a correlated hopping sequence. The code achieved after a first hop is related to a code achieved after a next hop. Because of this, although there is shifting in the rows of the code matrix when code hopping is enabled, the rows are not being shifted far enough from their previous positions. Thus, not enough randomness is being introduced into the code matrix between transmissions, which results in any narrowband interference to still introduce inequality in communication fidelity.
Therefore, what is needed is a system and method that would allow for larger and uncorrelated code hopping, which can increase equality in transmissions.
The present invention will now be described with reference to the accompanying drawings. In the drawings, like reference numbers may indicate identical or functionally similar elements. Additionally, the left-most digit(s) of a reference number may identify the drawing in which the reference number first appears.